(fill-rectangle) Added. Inspired by Lynn Slater's insert-box package in LCD,
authorEric S. Raymond <esr@snark.thyrsus.com>
Sat, 27 Mar 1993 01:58:26 +0000 (01:58 +0000)
committerEric S. Raymond <esr@snark.thyrsus.com>
Sat, 27 Mar 1993 01:58:26 +0000 (01:58 +0000)
but the interface and implementation are different.

lisp/rect.el

index e440904912faf43db60cb4f696161fbcb5f48288..7e80734a19c3ea2c0aa307a3c02294823e62cdd4 100644 (file)
@@ -191,6 +191,30 @@ but instead winds up to the right of the rectangle."
                          (point)))
     (indent-to column)))
 
+;;;###autoload
+(defun fill-rectangle (start end text)
+  "Fill each line of the rectangle with corners at point and mark with
+text, shifting text right.  The text previously in the region is not
+overwritten by the blanks, but instead winds up to the right of the
+rectangle.  Called from a program, takes three args; START, END and
+TEXT."
+  (interactive "r\nsText:")
+  (operate-on-rectangle 'fill-rectangle-line start end nil)
+  (goto-char start))
+
+(defun fill-rectangle-line (startpos begextra endextra)
+  (let ((column (+ (current-column) begextra endextra)))
+    (goto-char startpos)
+    (let ((ocol (current-column)))
+      (skip-chars-forward " \t")
+      (setq column (+ column (- (current-column) ocol))))
+    (delete-region (point)
+                  ;; Use skip-chars-backward's LIM argument to leave
+                  ;; characters before STARTPOS undisturbed.
+                   (progn (skip-chars-backward " \t" startpos)
+                         (point)))
+    (insert text)))
+
 ;;;###autoload
 (defun clear-rectangle (start end)
   "Blank out rectangle with corners at point and mark.